home *** CD-ROM | disk | FTP | other *** search
/ Aminet 31 / Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso / Aminet / mus / midi / XGToolset5_src.lha / XGToolset_src / XGReverb / XGReverb.c < prev    next >
C/C++ Source or Header  |  1999-02-18  |  76KB  |  2,034 lines

  1. /*
  2.     XG-Reverb-Editor V1.4
  3.  
  4.     A  Bars  and  Pipes  tool  for  editing  the  RVXG-XG-board  from  YAMAHA.
  5.     Especially the reverb-effects with all parameters.
  6.  
  7.     Use it together with the RVXGXG.ptool form us.
  8.  
  9.     © 1998 Alfred & Matthias Faust
  10.  
  11.     The Tool-code based farly on the code for  the  "pc3.ptool"  from  Richard
  12.     Hagen. That's a very good tool, many thanks to him.
  13.  
  14.     Richard has written his tool with DICE. We altered  the  code  to  compile
  15.     with  the  free  GNU-C-compiler  of  the  ADE.  Especially  the  part  was
  16.     transcripted,  that  place  the  imagedate  in   chip-RAM,   because   the
  17.     GNU-C-compiler  hasn't  as  yet  a keyword like DICE or other compiler for
  18.     this.
  19.  
  20.     This  code  is  released  into  the  Public  Domain,  and  may  be  freely
  21.     distributed in its original form.
  22.  
  23.     It is supplied ``as is'', and comes with no warranty.  This  program  code
  24.     was  released  because  it  might  be useful as a starting point for other
  25.     programmers. However, if any damage arises  from  its  use,  the  original
  26.     author and we will not be held liable.
  27.  
  28.     You are free to use and modify this code to your heart's content, provided
  29.     you  acknowledge  me  as  the  original  author in any code that you might
  30.     distribute which is based largely on this code.
  31.  
  32.     I acknowledge that the design of this tool is influenced strongly  by  the
  33.     example  code  supplied  with the Rules for Tools package. However, I have
  34.     made substantial contributions of my own.
  35.  
  36.     Matthias & Alfred Faust
  37.     j.k.dax@t-online.de
  38.  
  39.     History:
  40.         1.0 - 1.2
  41.         overjumping, because all tools shall have the same version number
  42.  
  43.         1.3 (13.11.1998)
  44.         Initial Release.
  45.  
  46.         1.4 (18.2.1999)
  47.         all slidervalues will be "remembered" if tool is placed in the
  48.         pipeline and stored with the song, reloaded and worked away.
  49.     
  50. */
  51.  
  52. #include "bars.h"
  53. #include "myheader.h"  // from R.Hagen
  54. #include <libraries/dos.h>
  55. #include <proto/exec.h>
  56. #include <proto/intuition.h>
  57. #include <proto/graphics.h>
  58. #include <exec/memory.h>
  59. #include <exec/execbase.h>
  60. #include <exec/types.h>
  61. #include <string.h>
  62. #include <intuition/intuition.h>
  63.  
  64.  
  65. char version[]="\0$VER:XG-Reverb-Edit 1.4 (18.2.1999) © Alfred & Matthias Faust";
  66.  
  67. #define RVXG_NAME "XG-Reverb-Edit"
  68.  
  69. #define RVXG_ID          0x52565847
  70. #define RVXG_TYPE        (TOOL_NORMAL | TOOL_NOTPAD)
  71.  
  72. // Hall-Effects  300 ->
  73.  
  74. #define hall1      0
  75. #define hall2      1
  76. #define room1      2
  77. #define room2      3
  78. #define room3      4
  79. #define stage1     5
  80. #define stage2     6
  81. #define plate      7
  82. #define whiteroom  8
  83. #define tunnel     9
  84. #define basement   10
  85.  
  86. extern struct ExecBase * SysBase;
  87.  
  88. /* the litte Icon in the pipeline */
  89.  
  90. UWORD *RVXG=NULL;
  91.  
  92. static UWORD RVXGdata[] =
  93. {
  94.         /* Plane 0 */
  95.                 0x7FFF,0xFE00,
  96.                 0x7FFF,0xFE00,
  97.                 0x7FBF,0xFE00,
  98.                 0x7EDF,0xFE00,
  99.                 0x7CEF,0xBE00,
  100.                 0x70EF,0xBE00,
  101.                 0x70EF,0xBE00,
  102.                 0x7CDF,0xFE00,
  103.                 0x7EBF,0xFE00,
  104.                 0x7FFF,0xFE00,
  105.                 0x7FFF,0xFE00,
  106.                 0x7FFF,0xFE00,
  107.         /* Plane 1 */
  108.                 0x0000,0x0200,
  109.                 0x0000,0x0600,
  110.                 0x1FFF,0xFE00,
  111.                 0x1FFF,0xFE00,
  112.                 0x9FFF,0xBF00,
  113.                 0x93FF,0xBF00,
  114.                 0x93FF,0xBF00,
  115.                 0x9FFF,0xFF00,
  116.                 0x1FFF,0xFE00,
  117.                 0x1FFF,0xFE00,
  118.                 0x1FFF,0xFE00,
  119.                 0x3FFF,0xFE00,
  120.         /* Plane 2 */
  121.                 0x0000,0x0000,
  122.                 0x0000,0x0000,
  123.                 0x1FBF,0xF800,
  124.                 0x1FDB,0xF800,
  125.                 0x1FED,0xF800,
  126.                 0x1FED,0xF800,
  127.                 0x1FED,0xF800,
  128.                 0x1FDB,0xF800,
  129.                 0x1FBF,0xF800,
  130.                 0x1FFF,0xF800,
  131.                 0x0000,0x0000,
  132.                 0x0000,0x0000
  133. };
  134.  
  135. static struct Image RVXG_image = {
  136.   0, 0,
  137.   24 ,  12 ,  3 ,
  138.   NULL,
  139.   0x1f, 0x00,
  140.   NULL
  141. };
  142.  
  143.  
  144. //Definitions of the gadgets
  145.  
  146.  
  147. #define RVTYPE_GADGET           1
  148. #define RVTYPEDOWN_GADGET       2
  149. #define RVTYPEUP_GADGET         3
  150.  
  151. #define RVTIME_GADGET           4
  152. #define RVTIMEDOWN_GADGET       5
  153. #define RVTIMEUP_GADGET         6
  154.  
  155. #define RVDIFFSN_GADGET         7
  156. #define RVDIFFSNDOWN_GADGET     8
  157. #define RVDIFFSNUP_GADGET       9
  158.  
  159. #define RVINITDELAY_GADGET      10
  160. #define RVINITDELAYDOWN_GADGET  11
  161. #define RVINITDELAYUP_GADGET    12
  162.  
  163. #define RVHPFCUTOFF_GADGET      13
  164. #define RVHPFCUTOFFDOWN_GADGET  14
  165. #define RVHPFCUTOFFUP_GADGET    15
  166.  
  167. #define RVLPFCUTOFF_GADGET      16
  168. #define RVLPFCUTOFFDOWN_GADGET  17
  169. #define RVLPFCUTOFFUP_GADGET    18
  170.  
  171. #define RVWIDTH_GADGET          19
  172. #define RVWIDTHDOWN_GADGET      20
  173. #define RVWIDTHUP_GADGET        21
  174.  
  175. #define RVHEIGHT_GADGET         22
  176. #define RVHEIGHTDOWN_GADGET     23
  177. #define RVHEIGHTUP_GADGET       24
  178.  
  179. #define RVDEPTH_GADGET          25
  180. #define RVDEPTHDOWN_GADGET      26
  181. #define RVDEPTHUP_GADGET        27
  182.  
  183. #define RVWALLVARY_GADGET       28
  184. #define RVWALLVARYDOWN_GADGET   29
  185. #define RVWALLVARYUP_GADGET     30
  186.  
  187. #define RVDRYWET_GADGET         31
  188. #define RVDRYWETDOWN_GADGET     32
  189. #define RVDRYWETUP_GADGET       33
  190.  
  191. #define RVRETURN_GADGET         34
  192. #define RVRETURNDOWN_GADGET     35
  193. #define RVRETURNUP_GADGET       36
  194.  
  195. #define RVPAN_GADGET            37
  196. #define RVPANDOWN_GADGET        38
  197. #define RVPANUP_GADGET          39
  198.  
  199. #define RVDELAY_GADGET          40
  200. #define RVDELAYDOWN_GADGET      41
  201. #define RVDELAYUP_GADGET        42
  202.  
  203. #define RVDENSITY_GADGET        43
  204. #define RVDENSITYDOWN_GADGET    44
  205. #define RVDENSITYUP_GADGET      45
  206.  
  207. #define RVERREVBAL_GADGET       46
  208. #define RVERREVBALDOWN_GADGET   47
  209. #define RVERREVBALUP_GADGET     48
  210.  
  211. #define RVFEEDBACK_GADGET       49
  212. #define RVFEEDBACKDOWN_GADGET   50
  213. #define RVFEEDBACKUP_GADGET     51
  214.  
  215. #define WRITE_GADGET            52
  216.  
  217. //all the gadgets
  218.  
  219. /* Reverb-Type-Gadget */
  220. struct PropInfo RVXGGadget1SInfo = {
  221.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  222. };
  223.  
  224. struct Image RVXGImage1 = {
  225.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  226. };
  227.  
  228. struct IntuiText RVXGIText1 = {
  229.   2, 0, JAM1, -78, 1, NULL, "     Type", NULL
  230. };
  231.  
  232. struct Gadget RVXGGadget1 = {
  233.   NULL, 85, 31, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  234.   (APTR)&RVXGImage1, NULL, &RVXGIText1, NULL, (APTR)&RVXGGadget1SInfo, RVTYPE_GADGET, NULL
  235. };
  236.  
  237.  
  238. /* Reverb-Time-Gadget */
  239. struct PropInfo RVXGGadget2SInfo = {
  240.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  241. };
  242.  
  243. struct Image RVXGImage2 = {
  244.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  245. };
  246. struct Gadget RVXGGadget2 = {
  247.   &RVXGGadget1, 85, 42, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  248.   (APTR)&RVXGImage2, NULL, NULL, NULL, (APTR)&RVXGGadget2SInfo, RVTIME_GADGET, NULL
  249. };
  250.  
  251.  
  252. /* Reverb-Diffusion-Gadget */
  253. struct PropInfo RVXGGadget3SInfo = {
  254.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  255. };
  256.  
  257. struct Image RVXGImage3 = {
  258.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  259. };
  260.  
  261. struct IntuiText RVXGIText3 = {
  262.   2, 0, JAM1, -78, 1, NULL, "Diffusion", NULL
  263. };
  264.  
  265. struct Gadget RVXGGadget3 = {
  266.   &RVXGGadget2, 85, 53, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  267.   (APTR)&RVXGImage3, NULL, &RVXGIText3, NULL, (APTR)&RVXGGadget3SInfo, RVDIFFSN_GADGET, NULL
  268. };
  269.  
  270. //Reverb-Initial-Delay-Gadget
  271. struct PropInfo RVXGGadget4SInfo = {
  272.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  273. };
  274.  
  275. struct Image RVXGImage4 = {
  276.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  277. };
  278.  
  279. struct IntuiText RVXGIText4 = {
  280.   2, 0, JAM1, -78, 1, NULL, "InitDelay", NULL
  281. };
  282.  
  283. struct Gadget RVXGGadget4 = {
  284.   &RVXGGadget3, 85, 64, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  285.   (APTR)&RVXGImage4, NULL, &RVXGIText4, NULL, (APTR)&RVXGGadget4SInfo, RVINITDELAY_GADGET, NULL
  286. }; //  RVINITDELAY_GADGET
  287.  
  288. //Reverb-HpfCutoff-Gadget
  289. struct PropInfo RVXGGadget5SInfo = {
  290.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  291. };
  292.  
  293. struct Image RVXGImage5 = {
  294.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  295. };
  296.  
  297. struct IntuiText RVXGIText5 = {
  298.   2, 0, JAM1, -78, 1, NULL, "HpfCutoff", NULL
  299. };
  300.  
  301. struct Gadget RVXGGadget5 = {
  302.   &RVXGGadget4, 85, 75, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  303.   (APTR)&RVXGImage5, NULL, &RVXGIText5, NULL, (APTR)&RVXGGadget5SInfo, RVHPFCUTOFF_GADGET, NULL
  304. }; //RVHPFCUTOFF_GADGET
  305.  
  306.  
  307. //Reverb-LpfCutoff-Gadget
  308. struct PropInfo RVXGGadget6SInfo = {
  309.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  310. };
  311.  
  312. struct Image RVXGImage6 = {
  313.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  314. };
  315.  
  316. struct IntuiText RVXGIText6 = {
  317.   2, 0, JAM1, -78, 1, NULL, "LpfCutoff", NULL
  318. };
  319.  
  320. struct Gadget RVXGGadget6 = {
  321.   &RVXGGadget5, 85, 86, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  322.   (APTR)&RVXGImage6, NULL, &RVXGIText6, NULL, (APTR)&RVXGGadget6SInfo, RVLPFCUTOFF_GADGET, NULL
  323. }; //RVLPFCUTOFF_GADGET
  324.  
  325. //Reverb-Width-Gadget
  326. struct PropInfo RVXGGadget7SInfo = {
  327.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  328. };
  329.  
  330. struct Image RVXGImage7 = {
  331.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  332. };
  333.  
  334. struct Gadget RVXGGadget7 = {
  335.   &RVXGGadget6, 85, 97, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  336.   (APTR)&RVXGImage7, NULL, NULL, NULL, (APTR)&RVXGGadget7SInfo, RVWIDTH_GADGET, NULL
  337. }; //RVWIDTH_GADGET
  338.  
  339. //Reverb-Height-Gadget
  340. struct PropInfo RVXGGadget8SInfo = {
  341.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  342. };
  343.  
  344. struct Image RVXGImage8 = {
  345.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  346. };
  347.  
  348. struct Gadget RVXGGadget8 = {
  349.   &RVXGGadget7, 85, 108, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  350.   (APTR)&RVXGImage8, NULL, NULL, NULL, (APTR)&RVXGGadget8SInfo, RVHEIGHT_GADGET, NULL
  351. }; //RVHEIGHT_GADGET
  352.  
  353.  
  354. //Reverb-Depth-Gadget
  355. struct PropInfo RVXGGadget9SInfo = {
  356.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  357. };
  358.  
  359. struct Image RVXGImage9 = {
  360.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  361. };
  362.  
  363. struct Gadget RVXGGadget9 = {
  364.   &RVXGGadget8, 85, 119, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  365.   (APTR)&RVXGImage9, NULL, NULL, NULL, (APTR)&RVXGGadget9SInfo, RVDEPTH_GADGET, NULL
  366. }; //RVDEPTH_GADGET
  367.  
  368.  
  369. //Reverb-WallVary-Gadget
  370. struct PropInfo RVXGGadget10SInfo = {
  371.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  372. };
  373.  
  374. struct Image RVXGImage10 = {
  375.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  376. };
  377.  
  378. struct Gadget RVXGGadget10 = {
  379.   &RVXGGadget9, 85, 130, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  380.   (APTR)&RVXGImage10, NULL, NULL, NULL, (APTR)&RVXGGadget10SInfo, RVWALLVARY_GADGET, NULL
  381. }; //RVWALLVARY_GADGET
  382.  
  383. //Reverb-Dry/Wet-Gadget
  384. struct PropInfo RVXGGadget11SInfo = {
  385.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  386. };
  387.  
  388. struct Image RVXGImage11 = {
  389.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  390. };
  391.  
  392. struct IntuiText RVXGIText11 = {
  393.   2, 0, JAM1, -78, 1, NULL, "Dry<->Wet", NULL
  394. };
  395.  
  396. struct Gadget RVXGGadget11 = {
  397.   &RVXGGadget10, 85, 141, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  398.   (APTR)&RVXGImage11, NULL, &RVXGIText11, NULL, (APTR)&RVXGGadget11SInfo, RVDRYWET_GADGET, NULL
  399. }; //RVDRYWET_GADGET
  400.  
  401. //Reverb-Return-Gadget
  402. struct PropInfo RVXGGadget12SInfo = {
  403.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  404. };
  405.  
  406. struct Image RVXGImage12 = {
  407.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  408. };
  409.  
  410. struct Gadget RVXGGadget12 = {
  411.   &RVXGGadget11, 85, 152, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  412.   (APTR)&RVXGImage12, NULL, NULL, NULL, (APTR)&RVXGGadget12SInfo, RVRETURN_GADGET, NULL
  413. }; //RVRETURN_GADGET
  414.  
  415. //Reverb-Pan-Gadget
  416. struct PropInfo RVXGGadget13SInfo = {
  417.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  418. };
  419.  
  420. struct Image RVXGImage13 = {
  421.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  422. };
  423.  
  424. struct Gadget RVXGGadget13 = {
  425.   &RVXGGadget12, 85, 163, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  426.   (APTR)&RVXGImage13, NULL, NULL, NULL, (APTR)&RVXGGadget13SInfo, RVPAN_GADGET, NULL
  427. }; //RVPAN_GADGET
  428.  
  429.  
  430. //Reverb-Delay-Gadget
  431. struct PropInfo RVXGGadget14SInfo = {
  432.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  433. };
  434.  
  435. struct Image RVXGImage14 = {
  436.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  437. };
  438.  
  439. struct IntuiText RVXGIText14 = {
  440.   2, 0, JAM1, -78, 1, NULL, "  RvDelay", NULL
  441. };
  442.  
  443. struct Gadget RVXGGadget14 = {
  444.   &RVXGGadget13, 85, 174, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  445.   (APTR)&RVXGImage14, NULL, &RVXGIText14, NULL, (APTR)&RVXGGadget14SInfo, RVDELAY_GADGET, NULL
  446. }; //RVDELAY_GADGET
  447.  
  448. //Reverb-Density-Gadget
  449. struct PropInfo RVXGGadget15SInfo = {
  450.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  451. };
  452.  
  453. struct Image RVXGImage15 = {
  454.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  455. };
  456.  
  457. struct IntuiText RVXGIText15 = {
  458.   2, 0, JAM1, -78, 1, NULL, "  Density", NULL
  459. };
  460.  
  461. struct Gadget RVXGGadget15 = {
  462.   &RVXGGadget14, 85, 185, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  463.   (APTR)&RVXGImage15, NULL, &RVXGIText15, NULL, (APTR)&RVXGGadget15SInfo, RVDENSITY_GADGET, NULL
  464. }; //RVDENSITY_GADGET
  465.  
  466. //Reverb-Er/RevBal-Gadget
  467. struct PropInfo RVXGGadget16SInfo = {
  468.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  469. };
  470.  
  471. struct Image RVXGImage16 = {
  472.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  473. };
  474.  
  475. struct IntuiText RVXGIText16 = {
  476.   2, 0, JAM1, -78, 1, NULL, "Er/RevBal", NULL
  477. };
  478.  
  479. struct Gadget RVXGGadget16 = {
  480.   &RVXGGadget15, 85, 196, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  481.   (APTR)&RVXGImage16, NULL, &RVXGIText16, NULL, (APTR)&RVXGGadget16SInfo, RVERREVBAL_GADGET, NULL
  482. }; //RVERREVBAL_GADGET
  483.  
  484. //Reverb-Feedback-Gadget
  485. struct PropInfo RVXGGadget17SInfo = {
  486.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  487. };
  488.  
  489. struct Image RVXGImage17 = {
  490.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  491. };
  492.  
  493. struct IntuiText RVXGIText17 = {
  494.   2, 0, JAM1, -78, 1, NULL, " Feedback", NULL
  495. };
  496.  
  497. struct Gadget RVXGGadget17 = {
  498.   &RVXGGadget16, 85, 207, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  499.   (APTR)&RVXGImage17, NULL, &RVXGIText17, NULL, (APTR)&RVXGGadget17SInfo, RVFEEDBACK_GADGET, NULL
  500. }; //RVFEEDBACK_GADGET
  501.  
  502. /* Write gadget. */
  503. struct IntuiText RVXGIText18 = {
  504.   4,0,JAM1,4,2,NULL,"Write",NULL
  505.   };
  506.  
  507. struct Gadget RVXGGadget18 = {
  508.   &RVXGGadget17,110,230,50,11,GFLG_GADGHBOX|GFLG_GADGHIMAGE,RELVERIFY|GADGIMMEDIATE,BOOLGADGET,
  509.   (APTR)NULL,NULL,&RVXGIText18,NULL,NULL,WRITE_GADGET,NULL
  510.   };
  511.  
  512. //the mainwindowstructure
  513.  
  514. struct NewWindow RVXGNewWindowStructure1 = {
  515.   5, 167,
  516.   275, 255,
  517.   0, 6,
  518.   GADGETDOWN|GADGETUP|CLOSEWINDOW,
  519.   WINDOWDRAG|WINDOWDEPTH|WINDOWCLOSE|ACTIVATE|NOCAREREFRESH,
  520.   &RVXGGadget18,
  521.   NULL,
  522.   "XGReverb-Editor",
  523.   NULL,
  524.   NULL,
  525.   5, 5,
  526.   -1, -1,
  527.   CUSTOMSCREEN
  528. };
  529.  
  530.  
  531. struct RVXGTool {
  532.   struct Tool tool;
  533.  
  534.   UBYTE revtype;
  535.   UBYTE revtime;
  536.   UBYTE revdiffusion;
  537.   UBYTE revinitdelay;
  538.   UBYTE revhpfcutoff;
  539.   UBYTE revlpfcutoff;
  540.   UBYTE revwidth;
  541.   UBYTE revheight;
  542.   UBYTE revdepth;
  543.   UBYTE revwallvary;
  544.   UBYTE revdrywet;
  545.   UBYTE revreturn;
  546.   UBYTE revpan;
  547.   UBYTE revdelay;
  548.   UBYTE revdensity;
  549.   UBYTE reverrevbal;
  550.   UBYTE revfeedback;
  551.  
  552.   char storage1[32];
  553.   char storage2[32];
  554.   char storage3[32];
  555.   char storage4[32];
  556.   char storage5[32];
  557.   char storage6[32];
  558.   char storage7[32];
  559.   char storage8[32];
  560.   char storage9[32];
  561.   char storage10[32];
  562.   char storage11[32];
  563.   char storage12[32];
  564.   char storage13[32];
  565.   char storage14[32];
  566.   char storage15[32];
  567.   char storage16[32];
  568.   char storage17[32];
  569.  
  570.  
  571.   char *revtypesysex;
  572.   char *revtimesysex;
  573.   char *revdiffusionsysex;
  574.   char *revinitdelaysysex;
  575.   char *revhpfcutoffsysex;
  576.   char *revlpfcutoffsysex;
  577.   char *revwidthsysex;
  578.   char *revheightsysex;
  579.   char *revdepthsysex;
  580.   char *revwallvarysysex;
  581.   char *revdrywetsysex;
  582.   char *revreturnsysex;
  583.   char *revpansysex;
  584.   char *revdelaysysex;
  585.   char *revdensitysysex;
  586.   char *reverrevbalsysex;
  587.   char *revfeedbacksysex;
  588. };
  589.  
  590. static struct ToolMaster master;
  591.  
  592. extern struct Functions *functions;
  593.  
  594. //initial values
  595. static void RVXG_tool_init(struct RVXGTool *tool)
  596. {
  597.   tool->revtype         = 0x00;
  598.   tool->revtime         = 0x12;
  599.   tool->revdiffusion    = 0x0a;
  600.   tool->revinitdelay    = 0x08;
  601.   tool->revhpfcutoff    = 0x0d;
  602.   tool->revlpfcutoff    = 0x0f;
  603.   tool->revwidth        = 0x00;
  604.   tool->revheight       = 0x00;
  605.   tool->revdepth        = 0x00;
  606.   tool->revwallvary     = 0x00;
  607.   tool->revdrywet       = 0x28;
  608.   tool->revreturn       = 0x40;
  609.   tool->revpan          = 0x40;
  610.   tool->revdelay        = 0x00;
  611.   tool->revdensity      = 0x04;
  612.   tool->reverrevbal     = 0x32;
  613.   tool->revfeedback     = 0x40;
  614.  
  615.   tool->revtypesysex        = NULL;
  616.   tool->revtimesysex        = NULL;
  617.   tool->revdiffusionsysex   = NULL;
  618.   tool->revinitdelaysysex   = NULL;
  619.   tool->revhpfcutoffsysex   = NULL;
  620.   tool->revlpfcutoffsysex   = NULL;
  621.   tool->revwidthsysex       = NULL;
  622.   tool->revheightsysex      = NULL;
  623.   tool->revdepthsysex       = NULL;
  624.   tool->revwallvarysysex    = NULL;
  625.   tool->revdrywetsysex      = NULL;
  626.   tool->revreturnsysex      = NULL;
  627.   tool->revpansysex         = NULL;
  628.   tool->revdelaysysex       = NULL;
  629.   tool->revdensitysysex     = NULL;
  630.   tool->reverrevbalsysex    = NULL;
  631.   tool->revfeedbacksysex    = NULL;
  632.  
  633.   tool->tool.touched = TOUCH_INIT;
  634. }
  635.  
  636.  
  637. static struct Event * __saveds processeventcode(struct Event *event)
  638. {
  639.   event->tool = event->tool->next;
  640.   return(event);
  641. }
  642. //the necessary functions for writing to track
  643.  
  644. static BOOL lock_clip(struct Clip *clip)
  645. {
  646.   Forbid();
  647.   if (clip->locked == 0)
  648.     {
  649.       clip->locked = 1;
  650.       Permit();
  651.       return TRUE;
  652.     }
  653.   else
  654.     {
  655.       Permit();
  656.       return FALSE;
  657.     }
  658. }
  659.  
  660. static void unlock_clip(struct Clip *clip)
  661. {
  662.   clip->locked = 0;
  663. }
  664.  
  665. //writes sysex into track
  666.  
  667. static void __saveds insertsysex(char *buff, short size, struct RVXGTool *tool,  const LONG time)
  668. {
  669.     struct StringEvent *event;
  670.     struct String *string;
  671.  
  672.     event = (struct StringEvent *) (*functions->allocevent)();
  673.      if (event)
  674.       {
  675.         string = (struct String *) (*functions->myalloc)(size + 3, MEMF_CLEAR);
  676.         if (string)
  677.         {
  678.             event->next = NULL;
  679.             event->string = string;
  680.             memcpy(string->string,  buff,  size);
  681.             string->length = size + 2;
  682.             event->type = EVENT_SYSX;
  683.             event->status = MIDI_SYSX;
  684.             event->time = time;
  685.             event->tool = tool->tool.next;
  686.             if (lock_clip(&(tool->tool.track->clip)))
  687.               {
  688.                 event->next = (struct StringEvent *)tool->tool.track->clip.events.first;
  689.                 tool->tool.track->clip.events.first = (struct Event *)(*functions->sorteventlist)(event);
  690.                 unlock_clip(&(tool->tool.track->clip));
  691.               }
  692.             else
  693.               {
  694.                 (*functions->freelist)(event);
  695.               }
  696.  
  697.         }
  698.       }
  699.  
  700. }
  701.  
  702. // the routine for sending SysEx-data thru the pipeline
  703.  
  704. static void __saveds sendsysex(char *buff,  short size,  struct RVXGTool *tool,  const LONG time)
  705. {
  706.     struct StringEvent *event;
  707.     struct String *string;
  708.  
  709.     event = (struct StringEvent *) (*functions->allocevent)();
  710.      if (event)
  711.       {
  712.         string = (struct String *) (*functions->myalloc)(size + 3, MEMF_CLEAR);
  713.         if (string)
  714.         {
  715.             event->string = string;
  716.             memcpy(string->string,  buff,  size);
  717.             string->length = size + 2;
  718.             event->type = EVENT_SYSX;
  719.             event->status = MIDI_SYSX;
  720.             event->time = time;
  721.             event->tool = tool->tool.next;
  722.             WaitTOF();
  723.             (*functions->qevent)(event);
  724.             (*functions->myfree)(string);
  725.         }
  726.       }
  727.  
  728. }
  729.  
  730. static void __saveds trans_hx(struct RVXGTool *tool,  const LONG time,  char *sysx, int sw)
  731. {
  732.   LONG size;
  733.   int a,  b,  x,  y ;
  734.   UBYTE abuf[32];
  735.   char chr[4];
  736.   char *zbuf = NULL;
  737.  
  738.     //translate sysexbuffer into hex
  739.  
  740.   size = strlen(sysx);
  741.   zbuf = (char *)AllocVec(size+2,  MEMF_ANY|MEMF_CLEAR);
  742.   if(zbuf)
  743.      {
  744.        CopyMem(sysx,  zbuf,  size);
  745.        b=0;
  746.        for(a=0;a < size;a=a+2)
  747.            {
  748.              chr[0] = zbuf[a];
  749.              chr[1] = zbuf[a+1];
  750.  
  751.              x=(isdigit((int)chr[0]))? (chr[0]&0xF) : ((chr[0]&0xDF)-55); //this is the
  752.              y=(isdigit((int)chr[1]))? (chr[1]&0xF) : ((chr[1]&0xDF)-55); //the translate-core
  753.  
  754.              abuf[b++] = ((x<<4)|y);   //writing with bitmanipulation
  755.             }
  756.       //send hexdata
  757.  
  758.        FreeVec(zbuf);
  759.        if (sw == 0) sendsysex(abuf,  b,  tool,  time);
  760.        if (sw == 1) insertsysex(abuf,  b,  tool,  time);
  761.      }
  762.  
  763. }
  764.  
  765.  
  766.  
  767. // Writes all values of the sliders and more  in the main window
  768.  
  769. LONG __saveds display_routine(struct Window *window, struct Gadget *gadget, ULONG value)
  770. {
  771.   char text[10];
  772.  
  773.   char *revtimet, *revtypet, *revwidtht, *revheightt, *revdeptht, *revwallvaryt,
  774.        *revreturnt, *revpant;
  775.   char revtimetext[8];
  776.   char revtypetext[10];
  777.   char revwidthtext[10];
  778.   char revheighttext[10];
  779.   char revdepthtext[10];
  780.   char revwallvarytext[16];
  781.   char revreturntext[10];
  782.   char revpantext[8];
  783.  
  784.   const short id = gadget->GadgetID;
  785.   struct RastPort *rp = window->RPort;
  786.   char name[15];
  787.   int i=0;
  788.  
  789.   char revtypename[11][7]={
  790.   "Hall 1 ","Hall 2 ","Room 1 ","Room 2 ","Room 3 ","Stage 1","Stage 2","Plate  ","Wh.Room",
  791.   "Tunnel ","Basemnt"};
  792.  
  793.  
  794.          switch (id)
  795.               {
  796.               case RVTYPE_GADGET:
  797.                 revtypet = revtypename[value];
  798.                 sprintf(revtypetext,  "%7.7s",  revtypet);
  799.                 SetAPen(rp, 7);
  800.                 SetBPen(rp, 6);
  801.                 SetDrMd(rp,  INVERSVID|JAM2);
  802.                 Move(rp,  83, 26);
  803.                 Text(rp,  revtypetext,  7);
  804.                 SetAPen(rp,  2);
  805.                 SetBPen(rp,  0);
  806.                 SetDrMd(rp,  JAM2);
  807.                     if (value == hall1)
  808.                      {
  809.                      revtimet="Time";
  810.                      sprintf(revtimetext, "%5.5s", revtimet);
  811.                      Move(rp, 39, 49);
  812.                      Text(rp, revtimetext, 5);
  813.  
  814.                      revwidtht = "      ";
  815.                      sprintf(revwidthtext, "%6.6s", revwidtht);
  816.                      Move(rp, 30, 104);
  817.                      Text(rp, revwidthtext, 6);
  818.  
  819.                      revheightt = "       ";
  820.                      sprintf(revheighttext, "%7.7s", revheightt);
  821.                      Move(rp, 21, 115);
  822.                      Text(rp, revheighttext, 7);
  823.  
  824.                      revdeptht = "       ";
  825.                      sprintf(revdepthtext, "%7.7s", revdeptht);
  826.                      Move(rp, 25, 126);
  827.                      Text(rp, revdepthtext, 7);
  828.  
  829.                      revwallvaryt = "         ";
  830.                      sprintf(revwallvarytext, "%9.9s", revwallvaryt);
  831.                      Move(rp, 5, 137);
  832.                      Text(rp, revwallvarytext, 9);
  833.  
  834.                      revreturnt="RvReturn";
  835.                      sprintf(revreturntext, "%9.9s", revreturnt);
  836.                      Move(rp, 7, 159);
  837.                      Text(rp, revreturntext, 9);
  838.  
  839.                      revpant="RvPan";
  840.                      sprintf(revpantext, "%5.5s", revpant);
  841.                      Move(rp, 39, 170);
  842.                      Text(rp, revpantext, 5);
  843.  
  844.                      SetAPen(rp,  1);
  845.                      }
  846.                     else if (value == hall2)
  847.                      {
  848.                      revtimet="Time";
  849.                      sprintf(revtimetext, "%5.5s", revtimet);
  850.                      Move(rp, 39, 49);
  851.                      Text(rp, revtimetext, 5);
  852.  
  853.                      revwidtht = "      ";
  854.                      sprintf(revwidthtext, "%6.6s", revwidtht);
  855.                      Move(rp, 30, 104);
  856.                      Text(rp, revwidthtext, 6);
  857.  
  858.                      revheightt = "       ";
  859.                      sprintf(revheighttext, "%7.7s", revheightt);
  860.                      Move(rp, 21, 115);
  861.                      Text(rp, revheighttext, 7);
  862.  
  863.                      revdeptht = "       ";
  864.                      sprintf(revdepthtext, "%7.7s", revdeptht);
  865.                      Move(rp, 25, 126);
  866.                      Text(rp, revdepthtext, 7);
  867.  
  868.                      revwallvaryt = "         ";
  869.                      sprintf(revwallvarytext, "%9.9s", revwallvaryt);
  870.                      Move(rp, 5, 137);
  871.                      Text(rp, revwallvarytext, 9);
  872.  
  873.                      revreturnt = "         ";
  874.                      sprintf(revreturntext, "%9.9s", revreturnt);
  875.                      Move(rp, 7, 159);
  876.                      Text(rp, revreturntext, 9);
  877.  
  878.                      revpant="      ";
  879.                      sprintf(revpantext, "%6.6s", revpant);
  880.                      Move(rp, 35, 170);
  881.                      Text(rp, revpantext, 6);
  882.  
  883.                      SetAPen(rp,  1);
  884.                      }
  885.                     else if (value == room1)
  886.                      {
  887.                      revtimet="Time";
  888.                      sprintf(revtimetext, "%5.5s", revtimet);
  889.                      Move(rp, 39, 49);
  890.                      Text(rp, revtimetext, 5);
  891.  
  892.                      revwidtht = "      ";
  893.                      sprintf(revwidthtext, "%6.6s", revwidtht);
  894.                      Move(rp, 30, 104);
  895.                      Text(rp, revwidthtext, 6);
  896.  
  897.                      revheightt = "       ";
  898.                      sprintf(revheighttext, "%7.7s", revheightt);
  899.                      Move(rp, 21, 115);
  900.                      Text(rp, revheighttext, 7);
  901.  
  902.                      revdeptht = "       ";
  903.                      sprintf(revdepthtext, "%7.7s", revdeptht);
  904.                      Move(rp, 25, 126);
  905.                      Text(rp, revdepthtext, 7);
  906.  
  907.                      revwallvaryt = "         ";
  908.                      sprintf(revwallvarytext, "%9.9s", revwallvaryt);
  909.                      Move(rp, 5, 137);
  910.                      Text(rp, revwallvarytext, 9);
  911.  
  912.                      revreturnt = "         ";
  913.                      sprintf(revreturntext, "%9.9s", revreturnt);
  914.                      Move(rp, 7, 159);
  915.                      Text(rp, revreturntext, 9);
  916.  
  917.                      revpant="      ";
  918.                      sprintf(revpantext, "%6.6s", revpant);
  919.                      Move(rp, 35, 170);
  920.                      Text(rp, revpantext, 6);
  921.  
  922.                      SetAPen(rp,  1);
  923.                      }
  924.                     else if (value == room2)
  925.                      {
  926.                      revtimet="Time";
  927.                      sprintf(revtimetext, "%5.5s", revtimet);
  928.                      Move(rp, 39, 49);
  929.                      Text(rp, revtimetext, 5);
  930.  
  931.                      revwidtht = "       ";
  932.                      sprintf(revwidthtext, "%6.6s", revwidtht);
  933.                      Move(rp, 30, 104);
  934.                      Text(rp, revwidthtext, 6);
  935.  
  936.                      revheightt = "        ";
  937.                      sprintf(revheighttext, "%7.7s", revheightt);
  938.                      Move(rp, 21, 115);
  939.                      Text(rp, revheighttext, 7);
  940.  
  941.                      revdeptht = "       ";
  942.                      sprintf(revdepthtext, "%7.7s", revdeptht);
  943.                      Move(rp, 25, 126);
  944.                      Text(rp, revdepthtext, 7);
  945.  
  946.                      revwallvaryt = "          ";
  947.                      sprintf(revwallvarytext, "%9.9s", revwallvaryt);
  948.                      Move(rp, 5, 137);
  949.                      Text(rp, revwallvarytext, 9);
  950.  
  951.                      revreturnt = "          ";
  952.                      sprintf(revreturntext, "%9.9s", revreturnt);
  953.                      Move(rp, 7, 159);
  954.                      Text(rp, revreturntext, 9);
  955.  
  956.                      revpant="      ";
  957.                      sprintf(revpantext, "%6.6s", revpant);
  958.                      Move(rp, 35, 170);
  959.                      Text(rp, revpantext, 6);
  960.  
  961.                      SetAPen(rp,  1);
  962.                      }
  963.                     else if (value == room3)
  964.                      {
  965.                      revtimet="Time";
  966.                      sprintf(revtimetext, "%5.5s", revtimet);
  967.                      Move(rp, 39, 49);
  968.                      Text(rp, revtimetext, 5);
  969.  
  970.                      revwidtht = "       ";
  971.                      sprintf(revwidthtext, "%6.6s", revwidtht);
  972.                      Move(rp, 30, 104);
  973.                      Text(rp, revwidthtext, 6);
  974.  
  975.                      revheightt = "        ";
  976.                      sprintf(revheighttext, "%7.7s", revheightt);
  977.                      Move(rp, 21, 115);
  978.                      Text(rp, revheighttext, 7);
  979.  
  980.                      revdeptht = "       ";
  981.                      sprintf(revdepthtext, "%7.7s", revdeptht);
  982.                      Move(rp, 25, 126);
  983.                      Text(rp, revdepthtext, 7);
  984.  
  985.                      revwallvaryt = "          ";
  986.                      sprintf(revwallvarytext, "%9.9s", revwallvaryt);
  987.                      Move(rp, 5, 137);
  988.                      Text(rp, revwallvarytext, 9);
  989.  
  990.                      revreturnt = "          ";
  991.                      sprintf(revreturntext, "%9.9s", revreturnt);
  992.                      Move(rp, 7, 159);
  993.                      Text(rp, revreturntext, 9);
  994.  
  995.                      revpant="      ";
  996.                      sprintf(revpantext, "%6.6s", revpant);
  997.                      Move(rp, 35, 170);
  998.                      Text(rp, revpantext, 6);
  999.  
  1000.                      SetAPen(rp,  1);
  1001.                      }
  1002.                     else if (value == stage1)
  1003.                      {
  1004.                      revtimet = "      ";
  1005.                      sprintf(revtimetext, "%5.5s", revtimet);
  1006.                      Move(rp, 39, 49);
  1007.                      Text(rp, revtimetext, 5);
  1008.  
  1009.                      revwidtht = "       ";
  1010.                      sprintf(revwidthtext, "%6.6s", revwidtht);
  1011.                      Move(rp, 30, 104);
  1012.                      Text(rp, revwidthtext, 6);
  1013.  
  1014.                      revheightt = "        ";
  1015.                      sprintf(revheighttext, "%7.7s", revheightt);
  1016.                      Move(rp, 21, 115);
  1017.                      Text(rp, revheighttext, 7);
  1018.  
  1019.                      revdeptht = "       ";
  1020.                      sprintf(revdepthtext, "%7.7s", revdeptht);
  1021.                      Move(rp, 25, 126);
  1022.                      Text(rp, revdepthtext, 7);
  1023.  
  1024.                      revwallvaryt = "          ";
  1025.                      sprintf(revwallvarytext, "%9.9s", revwallvaryt);
  1026.                      Move(rp, 5, 137);
  1027.                      Text(rp, revwallvarytext, 9);
  1028.  
  1029.                      revreturnt="RvReturn";
  1030.                      sprintf(revreturntext, "%9.9s", revreturnt);
  1031.                      Move(rp, 7, 159);
  1032.                      Text(rp, revreturntext, 9);
  1033.  
  1034.                      revpant="RvPan";
  1035.                      sprintf(revpantext, "%5.5s", revpant);
  1036.                      Move(rp, 39, 170);
  1037.                      Text(rp, revpantext, 5);
  1038.  
  1039.                      SetAPen(rp,  1);
  1040.                      }
  1041.                     else if (value == stage2)
  1042.                      {
  1043.                      revtimet = "      ";
  1044.                      sprintf(revtimetext, "%5.5s", revtimet);
  1045.                      Move(rp, 39, 49);
  1046.                      Text(rp, revtimetext, 5);
  1047.  
  1048.                      revwidtht = "        ";
  1049.                      sprintf(revwidthtext, "%6.6s", revwidtht);
  1050.                      Move(rp, 30, 104);
  1051.                      Text(rp, revwidthtext, 6);
  1052.  
  1053.                      revheightt = "        ";
  1054.                      sprintf(revheighttext, "%7.7s", revheightt);
  1055.                      Move(rp, 21, 115);
  1056.                      Text(rp, revheighttext, 7);
  1057.  
  1058.                      revdeptht = "       ";
  1059.                      sprintf(revdepthtext, "%7.7s", revdeptht);
  1060.                      Move(rp, 25, 126);
  1061.                      Text(rp, revdepthtext, 7);
  1062.  
  1063.                      revwallvaryt = "          ";
  1064.                      sprintf(revwallvarytext, "%9.9s", revwallvaryt);
  1065.                      Move(rp, 5, 137);
  1066.                      Text(rp, revwallvarytext, 9);
  1067.  
  1068.                      revreturnt = "        ";
  1069.                      sprintf(revreturntext, "%9.9s", revreturnt);
  1070.                      Move(rp, 7, 159);
  1071.                      Text(rp, revreturntext, 9);
  1072.  
  1073.                      revpant="      ";
  1074.                      sprintf(revpantext, "%6.6s", revpant);
  1075.                      Move(rp, 35, 170);
  1076.                      Text(rp, revpantext, 6);
  1077.  
  1078.                      SetAPen(rp,  1);
  1079.                      }
  1080.                     else if (value == plate)
  1081.                      {
  1082.                      revtimet = "      ";
  1083.                      sprintf(revtimetext, "%5.5s", revtimet);
  1084.                      Move(rp, 39, 49);
  1085.                      Text(rp, revtimetext, 5);
  1086.  
  1087.                      revwidtht = "        ";
  1088.                      sprintf(revwidthtext, "%6.6s", revwidtht);
  1089.                      Move(rp, 30, 104);
  1090.                      Text(rp, revwidthtext, 6);
  1091.  
  1092.                      revheightt = "        ";
  1093.                      sprintf(revheighttext, "%7.7s", revheightt);
  1094.                      Move(rp, 21, 115);
  1095.                      Text(rp, revheighttext, 7);
  1096.  
  1097.                      revdeptht = "       ";
  1098.                      sprintf(revdepthtext, "%7.7s", revdeptht);
  1099.                      Move(rp, 25, 126);
  1100.                      Text(rp, revdepthtext, 7);
  1101.  
  1102.                      revwallvaryt = "          ";
  1103.                      sprintf(revwallvarytext, "%9.9s", revwallvaryt);
  1104.                      Move(rp, 5, 137);
  1105.                      Text(rp, revwallvarytext, 9);
  1106.  
  1107.                      revreturnt = "          ";
  1108.                      sprintf(revreturntext, "%9.9s", revreturnt);
  1109.                      Move(rp, 7, 159);
  1110.                      Text(rp, revreturntext, 9);
  1111.  
  1112.                      revpant="      ";
  1113.                      sprintf(revpantext, "%6.6s", revpant);
  1114.                      Move(rp, 35, 170);
  1115.                      Text(rp, revpantext, 6);
  1116.  
  1117.                      SetAPen(rp,  1);
  1118.                      }
  1119.                     else if (value == whiteroom)
  1120.                      {
  1121.                      revtimet="Time";
  1122.                      sprintf(revtimetext, "%5.5s", revtimet);
  1123.                      Move(rp, 39, 49);
  1124.                      Text(rp, revtimetext, 5);
  1125.  
  1126.                      revwidtht = "Width";
  1127.                      sprintf(revwidthtext, "%6.6s", revwidtht);
  1128.                      Move(rp, 30, 104);
  1129.                      Text(rp, revwidthtext, 6);
  1130.  
  1131.                      revheightt="Height";
  1132.                      sprintf(revheighttext, "%7.7s", revheightt);
  1133.                      Move(rp, 23, 115);
  1134.                      Text(rp, revheighttext, 7);
  1135.  
  1136.                      revdeptht="Depth";
  1137.                      sprintf(revdepthtext, "%7.7s", revdeptht);
  1138.                      Move(rp, 22, 126);
  1139.                      Text(rp, revdepthtext, 7);
  1140.  
  1141.                      revwallvaryt="WallVary";
  1142.                      sprintf(revwallvarytext, "%9.9s", revwallvaryt);
  1143.                      Move(rp, 5, 137);
  1144.                      Text(rp, revwallvarytext, 9);
  1145.  
  1146.                      revreturnt="RvReturn";
  1147.                      sprintf(revreturntext, "%9.9s", revreturnt);
  1148.                      Move(rp, 7, 159);
  1149.                      Text(rp, revreturntext, 9);
  1150.  
  1151.                      revpant="RvPan";
  1152.                      sprintf(revpantext, "%5.5s", revpant);
  1153.                      Move(rp, 39, 170);
  1154.                      Text(rp, revpantext, 5);
  1155.  
  1156.                      SetAPen(rp,  1);
  1157.                      }
  1158.                     else if (value == tunnel)
  1159.                      {
  1160.                      revtimet="Time";
  1161.                      sprintf(revtimetext, "%5.5s", revtimet);
  1162.                      Move(rp, 39, 49);
  1163.                      Text(rp, revtimetext, 5);
  1164.  
  1165.                      revwidtht = "Width";
  1166.                      sprintf(revwidthtext, "%6.6s", revwidtht);
  1167.                      Move(rp, 30, 104);
  1168.                      Text(rp, revwidthtext, 6);
  1169.  
  1170.                      revheightt="Height";
  1171.                      sprintf(revheighttext, "%7.7s", revheightt);
  1172.                      Move(rp, 23, 115);
  1173.                      Text(rp, revheighttext, 7);
  1174.  
  1175.                      revdeptht="Depth";
  1176.                      sprintf(revdepthtext, "%7.7s", revdeptht);
  1177.                      Move(rp, 22, 126);
  1178.                      Text(rp, revdepthtext, 7);
  1179.  
  1180.                      revwallvaryt="WallVary";
  1181.                      sprintf(revwallvarytext, "%9.9s", revwallvaryt);
  1182.                      Move(rp, 5, 137);
  1183.                      Text(rp, revwallvarytext, 9);
  1184.  
  1185.                      revreturnt = "          ";
  1186.                      sprintf(revreturntext, "%9.9s", revreturnt);
  1187.                      Move(rp, 7, 159);
  1188.                      Text(rp, revreturntext, 9);
  1189.  
  1190.                      revpant="      ";
  1191.                      sprintf(revpantext, "%6.6s", revpant);
  1192.                      Move(rp, 35, 170);
  1193.                      Text(rp, revpantext, 6);
  1194.  
  1195.                      SetAPen(rp,  1);
  1196.                      }
  1197.                     else if (value == basement)
  1198.                      {
  1199.                      revtimet="Time";
  1200.                      sprintf(revtimetext, "%5.5s", revtimet);
  1201.                      Move(rp, 39, 49);
  1202.                      Text(rp, revtimetext, 5);
  1203.  
  1204.                      revwidtht = "Width";
  1205.                      sprintf(revwidthtext, "%6.6s", revwidtht);
  1206.                      Move(rp, 30, 104);
  1207.                      Text(rp, revwidthtext, 6);
  1208.  
  1209.                      revheightt="Height";
  1210.                      sprintf(revheighttext, "%7.7s", revheightt);
  1211.                      Move(rp, 23, 115);
  1212.                      Text(rp, revheighttext, 7);
  1213.  
  1214.                      revdeptht="Depth";
  1215.                      sprintf(revdepthtext, "%7.7s", revdeptht);
  1216.                      Move(rp, 22, 126);
  1217.                      Text(rp, revdepthtext, 7);
  1218.  
  1219.                      revwallvaryt="WallVary";
  1220.                      sprintf(revwallvarytext, "%9.9s", revwallvaryt);
  1221.                      Move(rp, 5, 137);
  1222.                      Text(rp, revwallvarytext, 9);
  1223.  
  1224.                      revreturnt = "          ";
  1225.                      sprintf(revreturntext, "%9.9s", revreturnt);
  1226.                      Move(rp, 7, 159);
  1227.                      Text(rp, revreturntext, 9);
  1228.  
  1229.                      revpant="      ";
  1230.                      sprintf(revpantext, "%6.6s", revpant);
  1231.                      Move(rp, 35, 170);
  1232.                      Text(rp, revpantext, 6);
  1233.  
  1234.                      SetAPen(rp,  1);
  1235.                      }
  1236.                 Move(rp,  240,  37);
  1237.                 break;
  1238.               case RVTIME_GADGET:
  1239.                 Move(rp,  240,  48);
  1240.                 break;
  1241.               case RVDIFFSN_GADGET:
  1242.                 Move(rp,  240,  59);
  1243.                 break;
  1244.               case RVINITDELAY_GADGET:
  1245.                 Move(rp,  240,  70);
  1246.                 break;
  1247.               case RVHPFCUTOFF_GADGET:
  1248.                 Move(rp,  240,  81);
  1249.                 break;
  1250.               case RVLPFCUTOFF_GADGET:
  1251.                 value = value + 34;
  1252.                 Move(rp,  240,  92);
  1253.                 break;
  1254.               case RVWIDTH_GADGET:
  1255.                 Move(rp,  240,  103);
  1256.                 break;
  1257.               case RVHEIGHT_GADGET:
  1258.                 Move(rp,  240,  114);
  1259.                 break;
  1260.               case RVDEPTH_GADGET:
  1261.                 Move(rp,  240,  125);
  1262.                 break;
  1263.               case RVWALLVARY_GADGET:
  1264.                 Move(rp,  240,  136);
  1265.                 break;
  1266.               case RVDRYWET_GADGET:
  1267.                 Move(rp,  240,  147);
  1268.                 break;
  1269.               case RVRETURN_GADGET:
  1270.                 Move(rp,  240,  158);
  1271.                 break;
  1272.               case RVPAN_GADGET:
  1273.                 Move(rp,  240,  169);
  1274.                 break;
  1275.               case RVDELAY_GADGET:
  1276.                 Move(rp,  240,  180);
  1277.                 break;
  1278.               case RVDENSITY_GADGET:
  1279.                 Move(rp,  240,  191);
  1280.                 break;
  1281.               case RVERREVBAL_GADGET:
  1282.                 Move(rp,  240,  202);
  1283.                 break;
  1284.               case RVFEEDBACK_GADGET:
  1285.                 Move(rp,  240,  213);
  1286.                 break;
  1287.               default:
  1288.                 break;
  1289.               }
  1290.   SetAPen(rp,  1);
  1291.   SetBPen(rp,  0);
  1292.   SetDrMd(rp,  JAM2);
  1293.   sprintf(text,  "%3ld",  value);
  1294.   Text(rp,  text,  3);
  1295.  
  1296.   return value;
  1297. }
  1298.  
  1299. //Drag & draw functions for the gadgets
  1300.  
  1301. static long drag_embossed_prop(struct Window *window,  short id,  UBYTE min)
  1302. {
  1303.   long value = (*functions->DragEmbossedProp)(window,  id);
  1304.   if (value < min)
  1305.     {
  1306.       value = min;
  1307.       (*functions->ModifyEmbossedProp)(window,  id,  value,  0,  0,  0,  0,  0);
  1308.     }
  1309.   (*functions->DrawEmbossedProp)(window,  id);
  1310.  
  1311.   return value;
  1312. }
  1313.  
  1314. static long shift_embossed_prop(struct Window *window,  short id,  short shift,  UBYTE min)
  1315. {
  1316.   long value = (*functions->ShiftEmbossedProp)(window,  id,  shift,  0);
  1317.   if (value < min)
  1318.     {
  1319.       value = min;
  1320.       (*functions->ModifyEmbossedProp)(window,  id,  value,  0,  0,  0,  0,  0);
  1321.     }
  1322.   (*functions->DrawEmbossedProp)(window,  id);
  1323.  
  1324.   return value;
  1325. }
  1326.  
  1327.  
  1328. //to hear the changes
  1329.  
  1330. static void send_note(struct RVXGTool *tool,  const long time,  const UBYTE note)
  1331. {
  1332.   struct NoteEvent *on_event = (struct NoteEvent *)(*functions->allocevent)();
  1333.   if (on_event)
  1334.     {
  1335.       struct NoteEvent *off_event = (struct NoteEvent *)(*functions->allocevent)();
  1336.       if (off_event)
  1337.         {
  1338.           on_event->next  =
  1339.           off_event->next = NULL;
  1340.  
  1341.           on_event->type  =
  1342.           off_event->type = EVENT_VOICE;
  1343.  
  1344.           on_event->status  = MIDI_NOTEON;
  1345.           off_event->status = MIDI_NOTEOFF;
  1346.  
  1347.           on_event->value  =
  1348.           off_event->value = note;
  1349.  
  1350.           on_event->velocity = 80;
  1351.  
  1352.           on_event->time  = time;
  1353.           off_event->time = time + 96;
  1354.  
  1355.           on_event->tool  =
  1356.           off_event->tool = tool->tool.next;
  1357.  
  1358.           (*functions->qevent)(on_event);
  1359.           (*functions->qevent)(off_event);
  1360.         }
  1361.       else
  1362.         {
  1363.           (*functions->freeevent)(on_event);
  1364.         }
  1365.     }
  1366. }
  1367.  
  1368.  
  1369.  
  1370. static void send_pc_and_note(struct RVXGTool *tool,  const long time,  const UBYTE note)
  1371. {
  1372.   //send_pc(tool,  time);
  1373.   send_note(tool,  time + 3,  note);
  1374. }
  1375.  
  1376. static void initvalues(struct Window *window, struct RVXGTool *tool, int init, UBYTE initswitch)
  1377. {
  1378.  int i;
  1379.  int initval[]={
  1380.  0x12,0x0a,0x08,0x0d,0x0f,0x00,0x00,0x00,0x00,0x28,0x40,0x40,0x00,0x04,0x32,0x40,    //Hall1
  1381.  0x19,0x0a,0x1c,0x06,0x0c,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x0d,0x03,0x4a,0x40,    //Hall2
  1382.  0x05,0x0a,0x10,0x04,0x0f,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x05,0x03,0x40,0x40,    //Room1
  1383.  0x0c,0x0a,0x05,0x04,0x04,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x03,0x32,0x40,    //Room2
  1384.  0x09,0x0a,0x2f,0x05,0x02,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x04,0x3c,0x40,    //Room3
  1385.  
  1386.  0x00,0x0a,0x10,0x07,0x14,0x00,0x00,0x00,0x00,0x28,0x40,0x40,0x00,0x03,0x40,0x40,    //Stage1
  1387.  0x00,0x0a,0x10,0x07,0x11,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x02,0x02,0x40,0x40,    //Stage2
  1388.  0x00,0x0a,0x06,0x08,0x0f,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x02,0x03,0x40,0x40,    //Plate
  1389.  
  1390.  0x09,0x05,0x0b,0x01,0x0c,0x1e,0x32,0x46,0x07,0x28,0x40,0x40,0x22,0x03,0x40,0x40,    //WhiteRoom
  1391.  0x30,0x06,0x13,0x01,0x0a,0x21,0x34,0x46,0x10,0x28,0x00,0x00,0x14,0x03,0x40,0x40,    //Tunnel
  1392.  0x03,0x06,0x03,0x01,0x01,0x1a,0x1d,0x3b,0x0f,0x28,0x00,0x00,0x20,0x03,0x40,0x40 };   //Basement
  1393.  
  1394.  if (initswitch == 1)
  1395.  {
  1396.    tool->revtime         = (UBYTE)initval[0+(init*16)];
  1397.    tool->revdiffusion    = (UBYTE)initval[1+(init*16)];
  1398.    tool->revinitdelay    = (UBYTE)initval[2+(init*16)];
  1399.    tool->revhpfcutoff    = (UBYTE)initval[3+(init*16)];
  1400.    tool->revlpfcutoff    = (UBYTE)initval[4+(init*16)];
  1401.    tool->revwidth        = (UBYTE)initval[5+(init*16)];
  1402.    tool->revheight       = (UBYTE)initval[6+(init*16)];
  1403.    tool->revdepth        = (UBYTE)initval[7+(init*16)];
  1404.    tool->revwallvary     = (UBYTE)initval[8+(init*16)];
  1405.    tool->revdrywet       = (UBYTE)initval[9+(init*16)];
  1406.    tool->revreturn       = (UBYTE)initval[10+(init*16)];
  1407.    tool->revpan          = (UBYTE)initval[11+(init*16)];
  1408.    tool->revdelay        = (UBYTE)initval[12+(init*16)];
  1409.    tool->revdensity      = (UBYTE)initval[13+(init*16)];
  1410.    tool->reverrevbal     = (UBYTE)initval[14+(init*16)];
  1411.    tool->revfeedback     = (UBYTE)initval[15+(init*16)];
  1412.  }
  1413.  
  1414.  (*functions->ModifyEmbossedProp)(window,  RVTIME_GADGET,  tool->revtime,  0,  0,  0,  0,  0);
  1415.  (*functions->ModifyEmbossedProp)(window,  RVDIFFSN_GADGET,  tool->revdiffusion,  0,  0,  0,  0,  0);
  1416.  (*functions->ModifyEmbossedProp)(window,  RVINITDELAY_GADGET,  tool->revinitdelay,  0,  0,  0,  0,  0);
  1417.  (*functions->ModifyEmbossedProp)(window,  RVHPFCUTOFF_GADGET,  tool->revhpfcutoff,  0,  0,  0,  0,  0);
  1418.  (*functions->ModifyEmbossedProp)(window,  RVLPFCUTOFF_GADGET,  tool->revlpfcutoff,  0,  0,  0,  0,  0);
  1419.  (*functions->ModifyEmbossedProp)(window,  RVWIDTH_GADGET,  tool->revwidth,  0,  0,  0,  0,  0);
  1420.  (*functions->ModifyEmbossedProp)(window,  RVHEIGHT_GADGET,  tool->revheight,  0,  0,  0,  0,  0);
  1421.  (*functions->ModifyEmbossedProp)(window,  RVDEPTH_GADGET,  tool->revdepth,  0,  0,  0,  0,  0);
  1422.  (*functions->ModifyEmbossedProp)(window,  RVWALLVARY_GADGET,  tool->revwallvary,  0,  0,  0,  0,  0);
  1423.  (*functions->ModifyEmbossedProp)(window,  RVDRYWET_GADGET,  tool->revdrywet,  0,  0,  0,  0,  0);
  1424.  (*functions->ModifyEmbossedProp)(window,  RVRETURN_GADGET,  tool->revreturn,  0,  0,  0,  0,  0);
  1425.  (*functions->ModifyEmbossedProp)(window,  RVPAN_GADGET,  tool->revpan,  0,  0,  0,  0,  0);
  1426.  (*functions->ModifyEmbossedProp)(window,  RVDELAY_GADGET,  tool->revdelay,  0,  0,  0,  0,  0);
  1427.  (*functions->ModifyEmbossedProp)(window,  RVDENSITY_GADGET,  tool->revdensity,  0,  0,  0,  0,  0);
  1428.  (*functions->ModifyEmbossedProp)(window,  RVERREVBAL_GADGET,  tool->reverrevbal,  0,  0,  0,  0,  0);
  1429.  (*functions->ModifyEmbossedProp)(window,  RVFEEDBACK_GADGET,  tool->revfeedback,  0,  0,  0,  0,  0);
  1430.  
  1431. for (i = RVTIME_GADGET; i <= RVFEEDBACK_GADGET; i += 3)
  1432.   {
  1433.     (*functions->DrawEmbossedProp)(window,  i);
  1434.   }
  1435. }
  1436.  
  1437.  
  1438. //the center off all
  1439.  
  1440. static void __saveds edittoolcode(struct RVXGTool *tool)
  1441. {
  1442.   struct IntuiMessage *message;
  1443.   struct Window *window;
  1444.   LONG class,  code,  time;
  1445.   struct Gadget *gadget;
  1446.   struct NewWindow *newwindow;
  1447.   int i,  ini, revres=0;
  1448.   char *sysexbuff=NULL, *revtypebt, *storagebt;
  1449.   char revtypebyte[11][4] ={
  1450.   "0100", "0101", "0202", "0201", "0202", "0300", "0301", "0400", "1000", "1100", "1300"};
  1451.  
  1452.   RVXGNewWindowStructure1.Screen = functions->screen;
  1453.  
  1454.   if (tool->tool.touched & TOUCH_EDIT)
  1455.     {
  1456.       RVXGNewWindowStructure1.LeftEdge = tool->tool.left;
  1457.       RVXGNewWindowStructure1.TopEdge = tool->tool.top;
  1458.       RVXGNewWindowStructure1.Width = tool->tool.width;
  1459.       RVXGNewWindowStructure1.Height = tool->tool.height;
  1460.  
  1461.       tool->revtypesysex         = tool->storage1;
  1462.       tool->revtimesysex         = tool->storage2;
  1463.       tool->revdiffusionsysex    = tool->storage3;
  1464.       tool->revinitdelaysysex    = tool->storage4;
  1465.       tool->revhpfcutoffsysex    = tool->storage5;
  1466.       tool->revlpfcutoffsysex    = tool->storage6;
  1467.       tool->revwidthsysex        = tool->storage7;
  1468.       tool->revheightsysex       = tool->storage8;
  1469.       tool->revdepthsysex        = tool->storage9;
  1470.       tool->revwallvarysysex     = tool->storage10;
  1471.       tool->revdrywetsysex       = tool->storage11;
  1472.       tool->revreturnsysex       = tool->storage12;
  1473.       tool->revpansysex          = tool->storage13;
  1474.       tool->revdelaysysex        = tool->storage14;
  1475.       tool->revdensitysysex      = tool->storage15;
  1476.       tool->reverrevbalsysex     = tool->storage16;
  1477.       tool->revfeedbacksysex     = tool->storage17;
  1478.     }
  1479.   
  1480.   if (!tool->tool.touched)
  1481.     {
  1482.       RVXG_tool_init(tool);
  1483.     }
  1484.  
  1485.   newwindow = (struct NewWindow *) (*functions->DupeNewWindow)(&RVXGNewWindowStructure1);
  1486.   if (!newwindow)
  1487.     {
  1488.       return;
  1489.     }
  1490.   newwindow->Title = 0;
  1491.   newwindow->Flags |= BORDERLESS;
  1492.   newwindow->Flags &= ~0xF;
  1493.   newwindow->BlockPen = 0;
  1494.   newwindow->DetailPen = 0;
  1495.  
  1496.   window = (struct Window *) (*functions->FlashyOpenWindow)(newwindow);
  1497.   if (!window) return;
  1498.  
  1499.   tool->tool.window = window;
  1500.   (*functions->EmbossWindowOn)(window, WINDOWCLOSE|WINDOWDEPTH|WINDOWDRAG,  RVXG_NAME, (short)-1, (short)-1, 0, 0);
  1501.  
  1502.  
  1503.   (*functions->FatEmbossedPropOn)(window,  RVTYPE_GADGET,  RVTYPEDOWN_GADGET,
  1504.                                   RVTYPEUP_GADGET, (void *)display_routine,  11,  1);
  1505.  
  1506.   (*functions->FatEmbossedPropOn)(window,  RVTIME_GADGET,  RVTIMEDOWN_GADGET,
  1507.                                   RVTIMEUP_GADGET, (void *)display_routine,  70,  1);
  1508.  
  1509.   (*functions->FatEmbossedPropOn)(window,  RVDIFFSN_GADGET,  RVDIFFSNDOWN_GADGET,
  1510.                                   RVDIFFSNUP_GADGET, (void *)display_routine,  11,  1);
  1511.  
  1512.   (*functions->FatEmbossedPropOn)(window,  RVINITDELAY_GADGET,  RVINITDELAYDOWN_GADGET,
  1513.                                   RVINITDELAYUP_GADGET, (void *)display_routine,  64,  1);
  1514.  
  1515.   (*functions->FatEmbossedPropOn)(window,  RVHPFCUTOFF_GADGET,  RVHPFCUTOFFDOWN_GADGET,
  1516.                                   RVHPFCUTOFFUP_GADGET, (void *)display_routine,  53,  1);
  1517.  
  1518.   (*functions->FatEmbossedPropOn)(window,  RVLPFCUTOFF_GADGET,  RVLPFCUTOFFDOWN_GADGET,
  1519.                                   RVLPFCUTOFFUP_GADGET, (void *)display_routine,  27,  1);
  1520.  
  1521.   (*functions->FatEmbossedPropOn)(window,  RVWIDTH_GADGET,  RVWIDTHDOWN_GADGET,
  1522.                                   RVWIDTHUP_GADGET, (void *)display_routine,  38,  1);
  1523.  
  1524.   (*functions->FatEmbossedPropOn)(window,  RVHEIGHT_GADGET,  RVHEIGHTDOWN_GADGET,
  1525.                                   RVHEIGHTUP_GADGET, (void *)display_routine,  74,  1);
  1526.  
  1527.   (*functions->FatEmbossedPropOn)(window,  RVDEPTH_GADGET,  RVDEPTHDOWN_GADGET,
  1528.                                   RVDEPTHUP_GADGET, (void *)display_routine,  74,  1);
  1529.  
  1530.   (*functions->FatEmbossedPropOn)(window,  RVWALLVARY_GADGET,  RVWALLVARYDOWN_GADGET,
  1531.                                   RVWALLVARYUP_GADGET, (void *)display_routine,  31,  1);
  1532.  
  1533.   (*functions->FatEmbossedPropOn)(window,  RVDRYWET_GADGET,  RVDRYWETDOWN_GADGET,
  1534.                                   RVDRYWETUP_GADGET, (void *)display_routine,  128,  1);
  1535.  
  1536.   (*functions->FatEmbossedPropOn)(window,  RVRETURN_GADGET,  RVRETURNDOWN_GADGET,
  1537.                                   RVRETURNUP_GADGET, (void *)display_routine,  128,  1);
  1538.  
  1539.   (*functions->FatEmbossedPropOn)(window,  RVPAN_GADGET,  RVPANDOWN_GADGET,
  1540.                                   RVPANUP_GADGET, (void *)display_routine,  128,  1);
  1541.  
  1542.   (*functions->FatEmbossedPropOn)(window,  RVDELAY_GADGET,  RVDELAYDOWN_GADGET,
  1543.                                   RVDELAYUP_GADGET, (void *)display_routine,  64,  1);
  1544.  
  1545.   (*functions->FatEmbossedPropOn)(window,  RVDENSITY_GADGET,  RVDENSITYDOWN_GADGET,
  1546.                                   RVDENSITYUP_GADGET, (void *)display_routine,  5,  1);
  1547.  
  1548.   (*functions->FatEmbossedPropOn)(window,  RVERREVBAL_GADGET,  RVERREVBALDOWN_GADGET,
  1549.                                   RVERREVBALUP_GADGET, (void *)display_routine,  128,  1);
  1550.  
  1551.   (*functions->FatEmbossedPropOn)(window,  RVFEEDBACK_GADGET,  RVFEEDBACKDOWN_GADGET,
  1552.                                   RVFEEDBACKUP_GADGET, (void *)display_routine,  128,  1);
  1553.  
  1554.  
  1555.   (*functions->EmbossOn)(window,  WRITE_GADGET,  1);
  1556.  
  1557.  
  1558.   (*functions->ModifyEmbossedProp)(window,  RVTYPE_GADGET,  tool->revtype,  0,  0,  0,  0,  0);
  1559.   (*functions->DrawEmbossedProp)(window,  RVTYPE_GADGET);
  1560.  
  1561.   ini = (int)tool->revtype;
  1562.   initvalues(window, tool, ini, 0);
  1563.   send_note(tool,  functions->timenow,  60);
  1564.  
  1565.   for (;;)
  1566.     {
  1567.  
  1568.       message = (struct IntuiMessage *) (*functions->GetIntuiMessage)(window);
  1569.       class = message->Class;
  1570.       code = message->Code;
  1571.       gadget = (struct Gadget *) message->IAddress;
  1572.       class = (*functions->SystemGadgets)(window, class, gadget, code);
  1573.  
  1574.       ReplyMsg((struct Message *)message);
  1575.  
  1576.  
  1577.       if (class == CLOSEWINDOW)
  1578.         {
  1579.           break;
  1580.         }
  1581.       else if (class == GADGETDOWN)
  1582.         {
  1583.           const short id = gadget->GadgetID;
  1584.           switch (id)
  1585.             {
  1586.             case RVTYPE_GADGET:
  1587.               tool->revtype = (UBYTE) drag_embossed_prop(window,  RVTYPE_GADGET,  0);
  1588.               revtypebt = revtypebyte[tool->revtype];
  1589.               sprintf(tool->storage1, "F043104C020100%.4sF7",revtypebt);
  1590.               tool->revtypesysex = tool->storage1;
  1591.               time = functions->timenow;
  1592.               trans_hx(tool,  time,  tool->revtypesysex, 0);
  1593.               ini = (int)tool->revtype;
  1594.               initvalues(window, tool, ini, 1);
  1595.               break;
  1596.             case RVTYPEDOWN_GADGET:
  1597.               tool->revtype = (UBYTE) shift_embossed_prop(window,  RVTYPE_GADGET,  -1,  0);
  1598.               revtypebt = revtypebyte[tool->revtype];
  1599.               sprintf(tool->storage1, "F043104C020100%.4sF7",revtypebt);
  1600.               tool->revtypesysex = tool->storage1;
  1601.               time = functions->timenow;
  1602.               trans_hx(tool,  time,  tool->revtypesysex, 0);
  1603.               ini = (int)tool->revtype;
  1604.               initvalues(window, tool, ini, 1);
  1605.               break;
  1606.             case RVTYPEUP_GADGET:
  1607.               tool->revtype = (UBYTE) shift_embossed_prop(window,  RVTYPE_GADGET,  1,  0);
  1608.               revtypebt = revtypebyte[tool->revtype];
  1609.               sprintf(tool->storage1, "F043104C020100%.4sF7",revtypebt);
  1610.               tool->revtypesysex = tool->storage1;
  1611.               time = functions->timenow;
  1612.               trans_hx(tool,  time,  tool->revtypesysex, 0);
  1613.               ini = (int)tool->revtype;
  1614.               initvalues(window, tool, ini, 1);
  1615.               break;
  1616.             case RVTIME_GADGET:
  1617.               tool->revtime = (UBYTE) drag_embossed_prop(window,  RVTIME_GADGET,  0);
  1618.               sprintf(tool->storage2, "F043104C020102%02lxF7",tool->revtime);
  1619.               tool->revtimesysex = tool->storage2;
  1620.               time = functions->timenow;
  1621.               trans_hx(tool,  time,  tool->revtimesysex, 0);
  1622.               break;
  1623.             case RVTIMEDOWN_GADGET:
  1624.               tool->revtime = (UBYTE) shift_embossed_prop(window,  RVTIME_GADGET,  -1,  0);
  1625.               sprintf(tool->storage2, "F043104C020102%02lxF7",tool->revtime);
  1626.               tool->revtimesysex = tool->storage2;
  1627.               time = functions->timenow;
  1628.               trans_hx(tool,  time,  tool->revtimesysex, 0);
  1629.               break;
  1630.             case RVTIMEUP_GADGET:
  1631.               tool->revtime = (UBYTE) shift_embossed_prop(window,  RVTIME_GADGET,  1,  0);
  1632.               sprintf(tool->storage2, "F043104C020102%02lxF7",tool->revtime);
  1633.               tool->revtimesysex = tool->storage2;
  1634.               time = functions->timenow;
  1635.               trans_hx(tool,  time,  tool->revtimesysex, 0);
  1636.               break;
  1637.             case RVDIFFSN_GADGET:
  1638.               tool->revdiffusion = (UBYTE) drag_embossed_prop(window,  RVDIFFSN_GADGET,  0);
  1639.               sprintf(tool->storage3, "F043104C020103%02lxF7",tool->revdiffusion);
  1640.               tool->revdiffusionsysex = tool->storage3;
  1641.               time = functions->timenow;
  1642.               trans_hx(tool,  time,  tool->revdiffusionsysex, 0);
  1643.               break;
  1644.             case RVDIFFSNDOWN_GADGET:
  1645.               tool->revdiffusion = (UBYTE) shift_embossed_prop(window,  RVDIFFSN_GADGET,  -1,  0);
  1646.               sprintf(tool->storage3, "F043104C020103%02lxF7",tool->revdiffusion);
  1647.               tool->revdiffusionsysex = tool->storage3;
  1648.               time = functions->timenow;
  1649.               trans_hx(tool,  time,  tool->revdiffusionsysex, 0);
  1650.               break;
  1651.             case RVDIFFSNUP_GADGET:
  1652.               tool->revdiffusion = (UBYTE) shift_embossed_prop(window,  RVDIFFSN_GADGET,  1,  0);
  1653.               sprintf(tool->storage3, "F043104C020103%02lxF7",tool->revdiffusion);
  1654.               tool->revdiffusionsysex = tool->storage3;
  1655.               time = functions->timenow;
  1656.               trans_hx(tool,  time,  tool->revdiffusionsysex, 0);
  1657.               break;
  1658.             case RVINITDELAY_GADGET:
  1659.               tool->revinitdelay = (UBYTE) drag_embossed_prop(window,  RVINITDELAY_GADGET,  0);
  1660.               sprintf(tool->storage4, "F043104C020104%02lxF7",tool->revinitdelay);
  1661.               tool->revinitdelaysysex = tool->storage4;
  1662.               time = functions->timenow;
  1663.               trans_hx(tool,  time,  tool->revinitdelaysysex, 0);
  1664.               break;
  1665.             case RVINITDELAYDOWN_GADGET:
  1666.               tool->revinitdelay = (UBYTE) shift_embossed_prop(window,  RVINITDELAY_GADGET,  -1,  0);
  1667.               sprintf(tool->storage4, "F043104C020104%02lxF7",tool->revinitdelay);
  1668.               tool->revinitdelaysysex = tool->storage4;
  1669.               time = functions->timenow;
  1670.               trans_hx(tool,  time,  tool->revinitdelaysysex, 0);
  1671.               break;
  1672.             case RVINITDELAYUP_GADGET:
  1673.               tool->revinitdelay = (UBYTE) shift_embossed_prop(window,  RVINITDELAY_GADGET,  1,  0);
  1674.               sprintf(tool->storage4, "F043104C020104%02lxF7",tool->revinitdelay);
  1675.               tool->revinitdelaysysex = tool->storage4;
  1676.               time = functions->timenow;
  1677.               trans_hx(tool,  time,  tool->revinitdelaysysex, 0);
  1678.               break;
  1679.             case RVHPFCUTOFF_GADGET:
  1680.               tool->revhpfcutoff = (UBYTE) drag_embossed_prop(window,  RVHPFCUTOFF_GADGET,  0);
  1681.               sprintf(tool->storage5, "F043104C020105%02lxF7",tool->revhpfcutoff);
  1682.               tool->revhpfcutoffsysex = tool->storage5;
  1683.               time = functions->timenow;
  1684.               trans_hx(tool,  time,  tool->revhpfcutoffsysex, 0);
  1685.               break;
  1686.             case RVHPFCUTOFFDOWN_GADGET:
  1687.               tool->revhpfcutoff = (UBYTE) shift_embossed_prop(window,  RVHPFCUTOFF_GADGET,  -1,  0);
  1688.               sprintf(tool->storage5, "F043104C020105%02lxF7",tool->revhpfcutoff);
  1689.               tool->revhpfcutoffsysex = tool->storage5;
  1690.               time = functions->timenow;
  1691.               trans_hx(tool,  time,  tool->revhpfcutoffsysex, 0);
  1692.               break;
  1693.             case RVHPFCUTOFFUP_GADGET:
  1694.               tool->revhpfcutoff = (UBYTE) shift_embossed_prop(window,  RVHPFCUTOFF_GADGET,  1,  0);
  1695.               sprintf(tool->storage5, "F043104C020105%02lxF7",tool->revhpfcutoff);
  1696.               tool->revhpfcutoffsysex = tool->storage5;
  1697.               time = functions->timenow;
  1698.               trans_hx(tool,  time,  tool->revhpfcutoffsysex, 0);
  1699.               break;
  1700.             case RVLPFCUTOFF_GADGET:
  1701.               tool->revlpfcutoff = (UBYTE) drag_embossed_prop(window,  RVLPFCUTOFF_GADGET,  0);
  1702.               sprintf(tool->storage6, "F043104C020106%02lxF7",tool->revlpfcutoff);
  1703.               tool->revlpfcutoffsysex = tool->storage6;
  1704.               time = functions->timenow;
  1705.               trans_hx(tool,  time,  tool->revlpfcutoffsysex, 0);
  1706.               break;
  1707.             case RVLPFCUTOFFDOWN_GADGET:
  1708.               tool->revlpfcutoff = (UBYTE) shift_embossed_prop(window,  RVLPFCUTOFF_GADGET,  -1,  0);
  1709.               sprintf(tool->storage6, "F043104C020106%02lxF7",tool->revlpfcutoff);
  1710.               tool->revlpfcutoffsysex = tool->storage6;
  1711.               time = functions->timenow;
  1712.               trans_hx(tool,  time,  tool->revlpfcutoffsysex, 0);
  1713.               break;
  1714.             case RVLPFCUTOFFUP_GADGET:
  1715.               tool->revlpfcutoff = (UBYTE) shift_embossed_prop(window,  RVLPFCUTOFF_GADGET,  1,  0);
  1716.               sprintf(tool->storage6, "F043104C020106%02lxF7",tool->revlpfcutoff);
  1717.               tool->revlpfcutoffsysex = tool->storage6;
  1718.               time = functions->timenow;
  1719.               trans_hx(tool,  time,  tool->revlpfcutoffsysex, 0);
  1720.               break;
  1721.             case RVWIDTH_GADGET:
  1722.               tool->revwidth = (UBYTE) drag_embossed_prop(window,  RVWIDTH_GADGET,  0);
  1723.               sprintf(tool->storage7, "F043104C020107%02lxF7",tool->revwidth);
  1724.               tool->revwidthsysex = tool->storage7;
  1725.               time = functions->timenow;
  1726.               trans_hx(tool,  time,  tool->revwidthsysex, 0);
  1727.               break;
  1728.             case RVWIDTHDOWN_GADGET:
  1729.               tool->revwidth = (UBYTE) shift_embossed_prop(window,  RVWIDTH_GADGET,  -1,  0);
  1730.               sprintf(tool->storage7, "F043104C020107%02lxF7",tool->revwidth);
  1731.               tool->revwidthsysex = tool->storage7;
  1732.               time = functions->timenow;
  1733.               trans_hx(tool,  time,  tool->revwidthsysex, 0);
  1734.               break;
  1735.             case RVWIDTHUP_GADGET:
  1736.               tool->revwidth = (UBYTE) shift_embossed_prop(window,  RVWIDTH_GADGET,  1,  0);
  1737.               sprintf(tool->storage7, "F043104C020107%02lxF7",tool->revwidth);
  1738.               tool->revwidthsysex = tool->storage7;
  1739.               time = functions->timenow;
  1740.               trans_hx(tool,  time,  tool->revwidthsysex, 0);
  1741.               break;
  1742.             case RVHEIGHT_GADGET:
  1743.               tool->revheight = (UBYTE) drag_embossed_prop(window,  RVHEIGHT_GADGET,  0);
  1744.               sprintf(tool->storage8, "F043104C020108%02lxF7",tool->revheight);
  1745.               tool->revheightsysex = tool->storage8;
  1746.               time = functions->timenow;
  1747.               trans_hx(tool,  time,  tool->revheightsysex, 0);
  1748.               break;
  1749.             case RVHEIGHTDOWN_GADGET:
  1750.               tool->revheight = (UBYTE) shift_embossed_prop(window,  RVHEIGHT_GADGET,  -1,  0);
  1751.               sprintf(tool->storage8, "F043104C020108%02lxF7",tool->revheight);
  1752.               tool->revheightsysex = tool->storage8;
  1753.               time = functions->timenow;
  1754.               trans_hx(tool,  time,  tool->revheightsysex, 0);
  1755.               break;
  1756.             case RVHEIGHTUP_GADGET:
  1757.               tool->revheight = (UBYTE) shift_embossed_prop(window,  RVHEIGHT_GADGET,  1,  0);
  1758.               sprintf(tool->storage8, "F043104C020108%02lxF7",tool->revheight);
  1759.               tool->revheightsysex = tool->storage8;
  1760.               time = functions->timenow;
  1761.               trans_hx(tool,  time,  tool->revheightsysex, 0);
  1762.               break;
  1763.             case RVDEPTH_GADGET:
  1764.               tool->revdepth = (UBYTE) drag_embossed_prop(window,  RVDEPTH_GADGET,  0);
  1765.               sprintf(tool->storage9, "F043104C020109%02lxF7",tool->revdepth);
  1766.               tool->revdepthsysex = tool->storage9;
  1767.               time = functions->timenow;
  1768.               trans_hx(tool,  time,  tool->revdepthsysex, 0);
  1769.               break;
  1770.             case RVDEPTHDOWN_GADGET:
  1771.               tool->revdepth = (UBYTE) shift_embossed_prop(window,  RVDEPTH_GADGET,  -1,  0);
  1772.               sprintf(tool->storage9, "F043104C020109%02lxF7",tool->revdepth);
  1773.               tool->revdepthsysex = tool->storage9;
  1774.               time = functions->timenow;
  1775.               trans_hx(tool,  time,  tool->revdepthsysex, 0);
  1776.               break;
  1777.             case RVDEPTHUP_GADGET:
  1778.               tool->revdepth = (UBYTE) shift_embossed_prop(window,  RVDEPTH_GADGET,  1,  0);
  1779.               sprintf(tool->storage9, "F043104C020109%02lxF7",tool->revdepth);
  1780.               tool->revdepthsysex = tool->storage9;
  1781.               time = functions->timenow;
  1782.               trans_hx(tool,  time,  tool->revdepthsysex, 0);
  1783.               break;
  1784.             case RVWALLVARY_GADGET:
  1785.               tool->revwallvary = (UBYTE) drag_embossed_prop(window,  RVWALLVARY_GADGET,  0);
  1786.               sprintf(tool->storage10, "F043104C02010A%02lxF7",tool->revwallvary);
  1787.               tool->revwallvarysysex = tool->storage10;
  1788.               time = functions->timenow;
  1789.               trans_hx(tool,  time,  tool->revwallvarysysex, 0);
  1790.               break;
  1791.             case RVWALLVARYDOWN_GADGET:
  1792.               tool->revwallvary = (UBYTE) shift_embossed_prop(window,  RVWALLVARY_GADGET,  -1,  0);
  1793.               sprintf(tool->storage10, "F043104C02010A%02lxF7",tool->revwallvary);
  1794.               tool->revwallvarysysex = tool->storage10;
  1795.               time = functions->timenow;
  1796.               trans_hx(tool,  time,  tool->revwallvarysysex, 0);
  1797.               break;
  1798.             case RVWALLVARYUP_GADGET:
  1799.               tool->revwallvary = (UBYTE) shift_embossed_prop(window,  RVWALLVARY_GADGET,  1,  0);
  1800.               sprintf(tool->storage10, "F043104C02010A%02lxF7",tool->revwallvary);
  1801.               tool->revwallvarysysex = tool->storage10;
  1802.               time = functions->timenow;
  1803.               trans_hx(tool,  time,  tool->revwallvarysysex, 0);
  1804.               break;
  1805.             case RVDRYWET_GADGET:
  1806.               tool->revdrywet = (UBYTE) drag_embossed_prop(window,  RVDRYWET_GADGET,  0);
  1807.               sprintf(tool->storage11, "F043104C02010B%02lxF7",tool->revdrywet);
  1808.               tool->revdrywetsysex = tool->storage11;
  1809.               time = functions->timenow;
  1810.               trans_hx(tool,  time,  tool->revdrywetsysex, 0);
  1811.               break;
  1812.             case RVDRYWETDOWN_GADGET:
  1813.               tool->revdrywet = (UBYTE) shift_embossed_prop(window,  RVDRYWET_GADGET,  -1,  0);
  1814.               sprintf(tool->storage11, "F043104C02010B%02lxF7",tool->revdrywet);
  1815.               tool->revdrywetsysex = tool->storage11;
  1816.               time = functions->timenow;
  1817.               trans_hx(tool,  time,  tool->revdrywetsysex, 0);
  1818.               break;
  1819.             case RVDRYWETUP_GADGET:
  1820.               tool->revdrywet = (UBYTE) shift_embossed_prop(window,  RVDRYWET_GADGET,  1,  0);
  1821.               sprintf(tool->storage11, "F043104C02010B%02lxF7",tool->revdrywet);
  1822.               tool->revdrywetsysex = tool->storage11;
  1823.               time = functions->timenow;
  1824.               trans_hx(tool,  time,  tool->revdrywetsysex, 0);
  1825.               break;
  1826.             case RVRETURN_GADGET:
  1827.               tool->revreturn = (UBYTE) drag_embossed_prop(window,  RVRETURN_GADGET,  0);
  1828.               sprintf(tool->storage12, "F043104C02010C%02lxF7",tool->revreturn);
  1829.               tool->revreturnsysex = tool->storage12;
  1830.               time = functions->timenow;
  1831.               trans_hx(tool,  time,  tool->revreturnsysex, 0);
  1832.               break;
  1833.             case RVRETURNDOWN_GADGET:
  1834.               tool->revreturn = (UBYTE) shift_embossed_prop(window,  RVRETURN_GADGET,  -1,  0);
  1835.               sprintf(tool->storage12, "F043104C02010C%02lxF7",tool->revreturn);
  1836.               tool->revreturnsysex = tool->storage12;
  1837.               time = functions->timenow;
  1838.               trans_hx(tool,  time,  tool->revreturnsysex, 0);
  1839.               break;
  1840.             case RVRETURNUP_GADGET:
  1841.               tool->revreturn = (UBYTE) shift_embossed_prop(window,  RVRETURN_GADGET,  1,  0);
  1842.               sprintf(tool->storage12, "F043104C02010C%02lxF7",tool->revreturn);
  1843.               tool->revreturnsysex = tool->storage12;
  1844.               time = functions->timenow;
  1845.               trans_hx(tool,  time,  tool->revreturnsysex, 0);
  1846.               break;
  1847.             case RVPAN_GADGET:
  1848.               tool->revpan = (UBYTE) drag_embossed_prop(window,  RVPAN_GADGET,  0);
  1849.               sprintf(tool->storage13, "F043104C02010D%02lxF7",tool->revpan);
  1850.               tool->revpansysex = tool->storage13;
  1851.               time = functions->timenow;
  1852.               trans_hx(tool,  time,  tool->revpansysex, 0);
  1853.               break;
  1854.             case RVPANDOWN_GADGET:
  1855.               tool->revpan = (UBYTE) shift_embossed_prop(window,  RVPAN_GADGET,  -1,  0);
  1856.               sprintf(tool->storage13, "F043104C02010D%02lxF7",tool->revpan);
  1857.               tool->revpansysex = tool->storage13;
  1858.               time = functions->timenow;
  1859.               trans_hx(tool,  time,  tool->revpansysex, 0);
  1860.               break;
  1861.             case RVPANUP_GADGET:
  1862.               tool->revpan = (UBYTE) shift_embossed_prop(window,  RVPAN_GADGET,  1,  0);
  1863.               sprintf(tool->storage13, "F043104C02010D%02lxF7",tool->revpan);
  1864.               tool->revpansysex = tool->storage13;
  1865.               time = functions->timenow;
  1866.               trans_hx(tool,  time,  tool->revpansysex, 0);
  1867.               break;
  1868.             case RVDELAY_GADGET:
  1869.               tool->revdelay = (UBYTE) drag_embossed_prop(window,  RVDELAY_GADGET,  0);
  1870.               sprintf(tool->storage14, "F043104C020110%02lxF7",tool->revdelay);
  1871.               tool->revdelaysysex = tool->storage14;
  1872.               time = functions->timenow;
  1873.               trans_hx(tool,  time,  tool->revdelaysysex, 0);
  1874.               break;
  1875.             case RVDELAYDOWN_GADGET:
  1876.               tool->revdelay = (UBYTE) shift_embossed_prop(window,  RVDELAY_GADGET,  -1,  0);
  1877.               sprintf(tool->storage14, "F043104C020110%02lxF7",tool->revdelay);
  1878.               tool->revdelaysysex = tool->storage14;
  1879.               time = functions->timenow;
  1880.               trans_hx(tool,  time,  tool->revdelaysysex, 0);
  1881.               break;
  1882.             case RVDELAYUP_GADGET:
  1883.               tool->revdelay = (UBYTE) shift_embossed_prop(window,  RVDELAY_GADGET,  1,  0);
  1884.               sprintf(tool->storage14, "F043104C020110%02lxF7",tool->revdelay);
  1885.               tool->revdelaysysex = tool->storage14;
  1886.               time = functions->timenow;
  1887.               trans_hx(tool,  time,  tool->revdelaysysex, 0);
  1888.               break;
  1889.             case RVDENSITY_GADGET:
  1890.               tool->revdensity = (UBYTE) drag_embossed_prop(window,  RVDENSITY_GADGET,  0);
  1891.               sprintf(tool->storage15, "F043104C020111%02lxF7",tool->revdensity);
  1892.               tool->revdensitysysex = tool->storage15;
  1893.               time = functions->timenow;
  1894.               trans_hx(tool,  time,  tool->revdensitysysex, 0);
  1895.               break;
  1896.             case RVDENSITYDOWN_GADGET:
  1897.               tool->revdelay = (UBYTE) shift_embossed_prop(window,  RVDENSITY_GADGET,  -1,  0);
  1898.               sprintf(tool->storage15, "F043104C020111%02lxF7",tool->revdensity);
  1899.               tool->revdensitysysex = tool->storage15;
  1900.               time = functions->timenow;
  1901.               trans_hx(tool,  time,  tool->revdensitysysex, 0);
  1902.               break;
  1903.             case RVDENSITYUP_GADGET:
  1904.               tool->revdelay = (UBYTE) shift_embossed_prop(window,  RVDENSITY_GADGET,  1,  0);
  1905.               sprintf(tool->storage15, "F043104C020111%02lxF7",tool->revdensity);
  1906.               tool->revdensitysysex = tool->storage15;
  1907.               time = functions->timenow;
  1908.               trans_hx(tool,  time,  tool->revdensitysysex, 0);
  1909.               break;
  1910.             case RVERREVBAL_GADGET:
  1911.               tool->reverrevbal = (UBYTE) drag_embossed_prop(window,  RVERREVBAL_GADGET,  0);
  1912.               sprintf(tool->storage16, "F043104C020112%02lxF7",tool->reverrevbal);
  1913.               tool->reverrevbalsysex = tool->storage16;
  1914.               time = functions->timenow;
  1915.               trans_hx(tool,  time,  tool->reverrevbalsysex, 0);
  1916.               break;
  1917.             case RVERREVBALDOWN_GADGET:
  1918.               tool->reverrevbal = (UBYTE) shift_embossed_prop(window,  RVERREVBAL_GADGET,  -1,  0);
  1919.               sprintf(tool->storage16, "F043104C020112%02lxF7",tool->reverrevbal);
  1920.               tool->reverrevbalsysex = tool->storage16;
  1921.               time = functions->timenow;
  1922.               trans_hx(tool,  time,  tool->reverrevbalsysex, 0);
  1923.               break;
  1924.             case RVERREVBALUP_GADGET:
  1925.               tool->reverrevbal = (UBYTE) shift_embossed_prop(window,  RVERREVBAL_GADGET,  1,  0);
  1926.               sprintf(tool->storage16, "F043104C020112%02lxF7",tool->reverrevbal);
  1927.               tool->reverrevbalsysex = tool->storage16;
  1928.               time = functions->timenow;
  1929.               trans_hx(tool,  time,  tool->reverrevbalsysex, 0);
  1930.               break;
  1931.             case RVFEEDBACK_GADGET:
  1932.               tool->revfeedback = (UBYTE) drag_embossed_prop(window,  RVFEEDBACK_GADGET,  0);
  1933.               sprintf(tool->storage17, "F043104C020114%02lxF7",tool->revfeedback);
  1934.               tool->revfeedbacksysex = tool->storage17;
  1935.               time = functions->timenow;
  1936.               trans_hx(tool,  time,  tool->revfeedbacksysex, 0);
  1937.               break;
  1938.             case RVFEEDBACKDOWN_GADGET:
  1939.               tool->revfeedback = (UBYTE) shift_embossed_prop(window,  RVFEEDBACK_GADGET,  -1,  0);
  1940.               sprintf(tool->storage17, "F043104C020114%02lxF7",tool->revfeedback);
  1941.               tool->revfeedbacksysex = tool->storage17;
  1942.               time = functions->timenow;
  1943.               trans_hx(tool,  time,  tool->revfeedbacksysex, 0);
  1944.               break;
  1945.             case RVFEEDBACKUP_GADGET:
  1946.               tool->revfeedback = (UBYTE) shift_embossed_prop(window,  RVFEEDBACK_GADGET,  1,  0);
  1947.               sprintf(tool->storage17, "F043104C020114%02lxF7",tool->revfeedback);
  1948.               tool->revfeedbacksysex = tool->storage17;
  1949.               time = functions->timenow;
  1950.               trans_hx(tool,  time,  tool->revfeedbacksysex, 0);
  1951.               break;
  1952.             case WRITE_GADGET:
  1953.               if ((*functions->areyousure)("write to track ? Play-pointer on right place?"))
  1954.                   {
  1955.                   if (!functions->running)
  1956.                       {
  1957.                       time = functions->starttime;
  1958.                       if (tool->revtypesysex        != NULL)trans_hx(tool, time,    tool->revtypesysex , 1);
  1959.                       if (tool->revtimesysex        != NULL)trans_hx(tool, time+1,  tool->revtimesysex , 1);
  1960.                       if (tool->revdiffusionsysex   != NULL)trans_hx(tool, time+2,  tool->revdiffusionsysex , 1);
  1961.                       if (tool->revinitdelaysysex   != NULL)trans_hx(tool, time+3,  tool->revinitdelaysysex , 1);
  1962.                       if (tool->revhpfcutoffsysex   != NULL)trans_hx(tool, time+4,  tool->revhpfcutoffsysex , 1);
  1963.                       if (tool->revlpfcutoffsysex   != NULL)trans_hx(tool, time+5,  tool->revlpfcutoffsysex , 1);
  1964.                       if (tool->revwidthsysex       != NULL)trans_hx(tool, time+6,  tool->revwidthsysex , 1);
  1965.                       if (tool->revheightsysex      != NULL)trans_hx(tool, time+7,  tool->revheightsysex , 1);
  1966.                       if (tool->revdepthsysex       != NULL)trans_hx(tool, time+9,  tool->revdepthsysex , 1);
  1967.                       if (tool->revwallvarysysex    != NULL)trans_hx(tool, time+10, tool->revwallvarysysex , 1);
  1968.                       if (tool->revdrywetsysex      != NULL)trans_hx(tool, time+11, tool->revdrywetsysex , 1);
  1969.                       if (tool->revreturnsysex      != NULL)trans_hx(tool, time+12, tool->revreturnsysex , 1);
  1970.                       if (tool->revpansysex         != NULL)trans_hx(tool, time+13, tool->revpansysex , 1);
  1971.                       if (tool->revdelaysysex       != NULL)trans_hx(tool, time+14, tool->revdelaysysex , 1);
  1972.                       if (tool->revdensitysysex     != NULL)trans_hx(tool, time+15, tool->revdensitysysex , 1);
  1973.                       if (tool->reverrevbalsysex    != NULL)trans_hx(tool, time+16, tool->reverrevbalsysex , 1);
  1974.                       if (tool->revfeedbacksysex    != NULL)trans_hx(tool, time+17, tool->revfeedbacksysex , 1);
  1975.                       }
  1976.                   }
  1977.               else {
  1978.                    // nothing
  1979.                    }
  1980.               break;
  1981.             }
  1982.         send_note(tool,  functions->timenow+30,  60);
  1983.         }
  1984.       else if (class == GADGETUP)
  1985.         {
  1986.           // Nothing.
  1987.         }
  1988.     }
  1989.   tool->tool.window = 0;
  1990.   tool->tool.left = window->LeftEdge;
  1991.   tool->tool.top = window->TopEdge;
  1992.   tool->tool.width = window->Width;
  1993.   tool->tool.height = window->Height;
  1994.   tool->tool.touched = TOUCH_INIT | TOUCH_EDIT;
  1995.  
  1996. for (i=RVTYPE_GADGET; i<=RVFEEDBACK_GADGET; i += 3)
  1997.     {
  1998.         (*functions->FatEmbossedPropOff)(window, i,  i + 1, i + 2);
  1999.     }
  2000.  
  2001.   (*functions->EmbossOff)(window,  WRITE_GADGET);
  2002.  
  2003.   (*functions->EmbossWindowOff)(window);
  2004.   (*functions->FlashyCloseWindow)(window);
  2005.   (*functions->DeleteNewWindow)(newwindow);
  2006. }
  2007.  
  2008. //to leave the tool correct
  2009.  
  2010. void __saveds removetool()
  2011. {
  2012. FreeVec(RVXG);
  2013. }
  2014.  
  2015. //start of the tool
  2016.  
  2017. struct ToolMaster * inittoolmaster()
  2018. {
  2019.   if (!(RVXG=(UWORD *)AllocVec(sizeof (RVXGdata), MEMF_CHIP|MEMF_CLEAR))) return(NULL);
  2020.   CopyMem(&RVXGdata, RVXG,  sizeof (RVXGdata));
  2021.  
  2022.   memset((char *)&master, 0, sizeof(struct ToolMaster));
  2023.   RVXG_image.ImageData = RVXG;
  2024.   master.toolid = RVXG_ID;
  2025.   master.image = &RVXG_image;
  2026.   strcpy(master.name,  RVXG_NAME);
  2027.   master.edittool = edittoolcode;
  2028.   master.processevent = processeventcode;
  2029.   master.tooltype = RVXG_TYPE;
  2030.   master.toolsize = sizeof(struct RVXGTool);
  2031.   master.removetool = removetool;
  2032.   return(&master);
  2033. }
  2034.